public class dicesProbability {

    // 状态转移
    public double[] _dicesProbability(int n) {
        // 状态转移方程 dp[i][j] = dp[i-1][j-1]+1+dp[i-1][j-2]+1+....dp[i-1][j-6]+1
        // i表示第几个骰子，j表示总数和，i-1表示前几个骰子，[i-1][j-1]表示前几个骰子总数为j-1
        // 1个骰子 1-6 2个骰子 2-12 3个骰子 3-18 n个骰子 n-5n+1
        int[][] dp = new int[n][6 * n];
        double[] ans = new double[5 * n + 1];
        // 初始化一个骰子的时候
        for (int i = 0; i < 6; i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i < n; i++) {
            for (int j = i; j < 6 * (i + 1); j++) {
                for (int k = 1; k <= 6; k++) {
                    if (i - 1 >= 0 && j - k >= 0) {
                        dp[i][j] += dp[i - 1][j - k];
                    }
                }
            }
        }
        double all = Math.pow(6.0, n);
        for (int i = 0; i < 5 * n + 1; i++) {
            ans[i] = dp[n - 1][i + n - 1] / all;
        }

        return ans;

    }

}
